Skip to content

Add deferrable support for Cloud Functions invoke operator#69853

Open
qotique wants to merge 1 commit into
apache:mainfrom
qotique:feature/deferrable-cloud-functions
Open

Add deferrable support for Cloud Functions invoke operator#69853
qotique wants to merge 1 commit into
apache:mainfrom
qotique:feature/deferrable-cloud-functions

Conversation

@qotique

@qotique qotique commented Jul 14, 2026

Copy link
Copy Markdown
  • Add CloudFunctionInvokeFunctionTrigger for async invocation via asyncio.to_thread
  • Add deferrable parameter to CloudFunctionInvokeFunctionOperator with execute_complete()
  • Register trigger in provider.yaml and get_provider_info.py
  • Add unit tests for trigger and operator deferrable path

Closes #68908


Was generative AI tooling used to co-author this PR?
  • Yes (please specify the tool below)

  • Read the Pull Request Guidelines for more information. Note: commit author/co-author name and email in commits become permanently public when merged.
  • For fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
  • When adding dependency, check compliance with the ASF 3rd Party License Policy.
  • For significant user-facing changes create newsfragment: {pr_number}.significant.rst, in airflow-core/newsfragments. You can add this file in a follow-up commit after the PR is created so you know the PR number.

Important

🛠️ Maintainer triage note for @qotique · by @potiuk · 2026-07-18 15:46 UTC

Helpful heads-up from the maintainers — please address before this PR can be reviewed:

  • Pre-commit / static checks. See docs.

See the Pull Request quality criteria for details.

The ball is in your court — you've been assigned to this PR. Fix the above, then mark it Ready for review.

Automated triage — may be imperfect; a maintainer takes the next look.

@qotique
qotique requested a review from shahar1 as a code owner July 14, 2026 07:01
@boring-cyborg boring-cyborg Bot added area:providers provider:google Google (including GCP) related issues labels Jul 14, 2026
@boring-cyborg

boring-cyborg Bot commented Jul 14, 2026

Copy link
Copy Markdown

Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our Contributors' Guide
Here are some useful points:

  • Pay attention to the quality of your code (ruff, mypy and type annotations). Our prek-hooks will help you with that.
  • In case of a new feature add useful documentation (in docstrings or in docs/ directory). Adding a new operator? Check this short guide Consider adding an example Dag that shows how users should use it.
  • Consider using Breeze environment for testing locally, it's a heavy docker but it ships with a working Airflow and a lot of integrations.
  • Be patient and persistent. It might take some time to get a review or get the final approval from Committers.
  • Please follow ASF Code of Conduct for all communication including (but not limited to) comments on Pull Requests, Mailing list and Slack.
  • Be sure to read the Airflow Coding style.
  • Always keep your Pull Requests rebased, otherwise your build might fail due to changes not related to your commits.
    Apache Airflow is a community-driven project and together we are making it better 🚀.
    In case of doubts contact the developers at:
    Mailing List: dev@airflow.apache.org
    Slack: https://s.apache.org/airflow-slack

qotique pushed a commit to qotique/airflow that referenced this pull request Jul 14, 2026
qotique pushed a commit to qotique/airflow that referenced this pull request Jul 14, 2026
@qotique
qotique force-pushed the feature/deferrable-cloud-functions branch from 46c5d70 to 13a8e19 Compare July 14, 2026 18:36
qotique pushed a commit to qotique/airflow that referenced this pull request Jul 15, 2026
@qotique
qotique force-pushed the feature/deferrable-cloud-functions branch from 13a8e19 to 568a10c Compare July 15, 2026 09:30
qotique pushed a commit to qotique/airflow that referenced this pull request Jul 16, 2026
@qotique
qotique force-pushed the feature/deferrable-cloud-functions branch from 568a10c to 862cce3 Compare July 16, 2026 11:13
@qotique qotique changed the title feat(google): add deferrable support for Cloud Functions invoke operator Add deferrable support for Cloud Functions invoke operator Jul 16, 2026
@qotique
qotique marked this pull request as draft July 16, 2026 13:08
@qotique
qotique force-pushed the feature/deferrable-cloud-functions branch 2 times, most recently from 3264ad9 to f4f78ab Compare July 16, 2026 13:22
@qotique
qotique marked this pull request as ready for review July 17, 2026 09:57
@qotique
qotique marked this pull request as draft July 17, 2026 09:57
- Add CloudFunctionInvokeFunctionTrigger for async invocation via asyncio.to_thread.
- Add deferrable parameter to CloudFunctionInvokeFunctionOperator with execute_complete().
- Register trigger in provider.yaml and get_provider_info.py.
- Add unit tests for trigger and operator deferrable path.

Closes apache#68908
@qotique
qotique force-pushed the feature/deferrable-cloud-functions branch from f4f78ab to a1ee168 Compare July 17, 2026 12:03
@qotique
qotique marked this pull request as ready for review July 17, 2026 12:03

@shahar1 shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contribution!
Got a couple of comments, please address my comments and make sure that CI is green.

@@ -0,0 +1 @@
Add deferrable support for CloudFunctionInvokeFunctionOperator to invoke Google Cloud Functions asynchronously without blocking workers.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove this file - we don't use newsfragments in providers


from googleapiclient.errors import HttpError

from airflow.configuration import conf

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Provider code must import via compat SDK

def execute_complete(self, context: Context, event: dict):
"""Handle trigger completion and process the result."""
if event["status"] == "error":
raise AirflowException(event["message"])

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use a native Python/custom exception instead

Comment on lines +1103 to +1106
{
"integration-name": "Google Cloud Functions",
"python-modules": ["airflow.providers.google.cloud.triggers.cloud_functions"],
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file shouldn't be changed manually - it seems as not in sync with pre-commit hook (let the pre-commit make the modification for you, if necessary)

"function_name": self.function_id,
}

def execute_complete(self, context: Context, event: dict):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add type annotation for returned value

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:providers provider:google Google (including GCP) related issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: Add deferrable support for invoking/waiting on Google Cloud Functions / Cloud Run functions

3 participants